package com.enjava;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputText;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

@ManagedBean
@RequestScoped
public class Paso1Bean {
	@ManagedProperty(value="#{wizardBean}")
	WizardBean wizardBean;
	
	List<Alumno> listaAlumnos;
	List<Curso> listaCursos;
	public List<Curso> getListaCursos() {
		return listaCursos;
	}
	public void setListaCursos(List<Curso> listaCursos) {
		this.listaCursos = listaCursos;
	}

	HtmlDataTable tablaAlumnos,tablaCursos;
	
	public HtmlDataTable getTablaAlumnos() {
		return tablaAlumnos;
	}
	public void setTablaAlumnos(HtmlDataTable tablaAlumnos) {
		this.tablaAlumnos = tablaAlumnos;
	}
	public HtmlDataTable getTablaCursos() {
		return tablaCursos;
	}
	public void setTablaCursos(HtmlDataTable tablaCursos) {
		this.tablaCursos = tablaCursos;
	}

	Alumno alumno = new Alumno();
	
	public List<Alumno> getListaAlumnos() {
		return listaAlumnos;
	}
	public void setListaAlumnos(List<Alumno> listaAlumnos) {
		this.listaAlumnos = listaAlumnos;
	}

	HtmlInputText texto;
	public HtmlInputText getTexto() {
		return texto;
	}
	public void setTexto(HtmlInputText texto) {
		this.texto = texto;
	}
	
	@PostConstruct
	public void connstruyeRequest(){
		wizardBean.contador=1;
	}

	public void setWizardBean(WizardBean wizardBean) {
		this.wizardBean = wizardBean;
	}
	
	
	
	@PostConstruct
	public void preparado(){
		//System.out.println("acaba de construirse e inyectar las dependencias...");
		
		EntityManager em = wizardBean.emf.getEM();
		
		EntityTransaction transaction = em.getTransaction();
		transaction.begin();	
		
		cargaAlumnos(em);
		cargaCursos(em);
		em.getTransaction().commit();
		System.out.println(listaAlumnos);
		
		
	}
	private void cargaAlumnos(EntityManager em) {
		
		Query query = em.createQuery("Select Alumno from Alumno Alumno");
    	listaAlumnos=query.getResultList();
	}
	private void cargaCursos(EntityManager em) {
		
		Query query = em.createQuery("Select Curso from Curso Curso");
    	listaCursos=query.getResultList();
	}
	
	public void edita(ActionEvent actionEvent){
		Object rowData = getTablaAlumnos().getRowData();
		Alumno a=(Alumno) rowData;
		wizardBean.setAlumno(a);//introduce al alumno en la sesion
		//System.out.println(a.getNombre());
	}
	
	public void editaCurso(ActionEvent actionEvent){
		Object rowData = getTablaCursos().getRowData();
		Curso c=(Curso) rowData;
		wizardBean.setCurso(c);//introduce al alumno en la sesion
		//System.out.println(a.getNombre());
	}
	
	public String editar(){
		return "editar1?faces-redirect=true";
	}
	public String editarCurso(){
		return "editarCurso1?faces-redirect=true";
	}
	
	public String guardarAlumno(){
		
		
		EntityManager em = wizardBean.emf.getEM();
		
		EntityTransaction transaction = em.getTransaction();
		transaction.begin();	
		
		em.merge(wizardBean.alumno);
		cargaAlumnos(em);
		cargaCursos(em);
		em.getTransaction().commit();
		
		return "index?faces-redirect=true";
	}
	
public String guardarCurso(){
		
		
		EntityManager em = wizardBean.emf.getEM();
		
		EntityTransaction transaction = em.getTransaction();
		transaction.begin();	
		
		em.merge(wizardBean.curso);
		cargaAlumnos(em);
		cargaCursos(em);
		em.getTransaction().commit();
		
		return "index?faces-redirect=true";
	}
	
	public void borra(ActionEvent actionEvent){
		Object rowData = getTablaAlumnos().getRowData();
		Alumno a=(Alumno) rowData;
		wizardBean.setAlumno(a);//introduce al alumno en la sesion
		//System.out.println(a.getNombre());
	}
	
	public String borrar(){
		return "borrar1?faces-redirect=true";
	}
	
	
	public String eliminarAlumno(){
		EntityManager em = wizardBean.emf.getEM();
		Query query = em.createQuery("Select Alumno from Alumno Alumno where Alumno.id=:idP");
		query.setParameter("idP", wizardBean.getAlumno().getId());
		
		alumno=(Alumno) query.getSingleResult();
		
		EntityTransaction transaction = em.getTransaction();
		transaction.begin();	
		
		em.remove(alumno);
		cargaAlumnos(em);
		em.getTransaction().commit();
		
		return "index?faces-redirect=true";
	}
	
	
	
	
	
	public String index(){
		return "index?faces-redirect=true";
	}
	

	
}